1 Introduction

The total analysis is divided into a couple of subject areas such as

The reader may read the summary here and proceed in detail for the graphs. The graphs here are simple but pragmatic.


Desire to Learn in Next Year



Lifestyle Analysis


Salary Analysis


AI Viewpoint Analysis

According to the StackOverflow respondents


Job Assessment

The questions have been framed on different topics for developers on how they assess the job. The framework of the questions have 1 with the most important and 10 is the least important.

Developors provide the Most Importance to


Job Benefits Assessment

The developers have assessed a job benefits package and provided ratings. ( 1- Most Important, 11 - Least Important).

The most important factors while assessing the job benefits package are


Developer mentalities

We explore the Developer mentalities here.


Ethics analysis

StackOverflow Inclusivity analysis

Hypothetical Tools Interest

Most Developers show the following interests for the Hypothetical Tools

2 Read Data

library(tidyverse)
library(stringr)
library(scales)

library(tidytext)
library(igraph)
library(ggraph)

library(treemap)

rm(list=ls())

fillColor = "#FFA07A"
fillColor2 = "#F1C40F"
fillColorLightCoral = "#F08080"

survey_results <- read_csv("input/survey_results_public.csv")

3 Glimpse of Data

glimpse(survey_results)
## Observations: 98,855
## Variables: 129
## $ Respondent                  <int> 1, 3, 4, 5, 7, 8, 9, 10, 11, 16, 1...
## $ Hobby                       <chr> "Yes", "Yes", "Yes", "No", "Yes", ...
## $ OpenSource                  <chr> "No", "Yes", "Yes", "No", "No", "N...
## $ Country                     <chr> "Kenya", "United Kingdom", "United...
## $ Student                     <chr> "No", "No", "No", "No", "Yes, part...
## $ Employment                  <chr> "Employed part-time", "Employed fu...
## $ FormalEducation             <chr> "Bachelor’s degree (BA, BS, B.Eng....
## $ UndergradMajor              <chr> "Mathematics or statistics", "A na...
## $ CompanySize                 <chr> "20 to 99 employees", "10,000 or m...
## $ DevType                     <chr> "Full-stack developer", "Database ...
## $ YearsCoding                 <chr> "3-5 years", "30 or more years", "...
## $ YearsCodingProf             <chr> "3-5 years", "18-20 years", "6-8 y...
## $ JobSatisfaction             <chr> "Extremely satisfied", "Moderately...
## $ CareerSatisfaction          <chr> "Extremely satisfied", "Neither sa...
## $ HopeFiveYears               <chr> "Working as a founder or co-founde...
## $ JobSearchStatus             <chr> "I’m not actively looking, but I a...
## $ LastNewJob                  <chr> "Less than a year ago", "More than...
## $ AssessJob1                  <int> 10, 1, NA, NA, 8, 8, 5, 6, 6, NA, ...
## $ AssessJob2                  <int> 7, 7, NA, NA, 5, 5, 3, 5, 3, NA, N...
## $ AssessJob3                  <int> 8, 10, NA, NA, 7, 4, 9, 4, 7, NA, ...
## $ AssessJob4                  <int> 1, 8, NA, NA, 1, 9, 4, 2, 4, NA, N...
## $ AssessJob5                  <int> 2, 2, NA, NA, 2, 1, 1, 7, 1, NA, N...
## $ AssessJob6                  <int> 5, 5, NA, NA, 6, 3, 8, 8, 5, NA, N...
## $ AssessJob7                  <int> 3, 4, NA, NA, 4, 6, 2, 10, 10, NA,...
## $ AssessJob8                  <int> 4, 3, NA, NA, 3, 2, 7, 1, 8, NA, N...
## $ AssessJob9                  <int> 9, 6, NA, NA, 10, 10, 10, 9, 9, NA...
## $ AssessJob10                 <int> 6, 9, NA, NA, 9, 7, 6, 3, 2, NA, N...
## $ AssessBenefits1             <int> NA, 1, NA, NA, 1, 1, 1, 1, 1, NA, ...
## $ AssessBenefits2             <int> NA, 5, NA, NA, 10, 3, 3, 3, 3, NA,...
## $ AssessBenefits3             <int> NA, 3, NA, NA, 2, 4, 2, 5, 2, NA, ...
## $ AssessBenefits4             <int> NA, 7, NA, NA, 4, 10, 9, 7, 9, NA,...
## $ AssessBenefits5             <int> NA, 10, NA, NA, 8, 9, 11, 6, 11, N...
## $ AssessBenefits6             <int> NA, 4, NA, NA, 3, 2, 4, 2, 5, NA, ...
## $ AssessBenefits7             <int> NA, 11, NA, NA, 11, 6, 8, 11, 8, N...
## $ AssessBenefits8             <int> NA, 9, NA, NA, 7, 5, 6, 9, 4, NA, ...
## $ AssessBenefits9             <int> NA, 6, NA, NA, 5, 11, 7, 4, 10, NA...
## $ AssessBenefits10            <int> NA, 2, NA, NA, 9, 7, 10, 10, 7, NA...
## $ AssessBenefits11            <int> NA, 8, NA, NA, 6, 8, 5, 8, 6, NA, ...
## $ JobContactPriorities1       <int> 3, 3, NA, NA, 2, 4, 3, 1, 5, NA, N...
## $ JobContactPriorities2       <int> 1, 1, NA, NA, 1, 2, 1, 3, 1, NA, N...
## $ JobContactPriorities3       <int> 4, 5, NA, NA, 4, 5, 5, 2, 2, NA, N...
## $ JobContactPriorities4       <int> 2, 2, NA, NA, 5, 1, 4, 4, 3, NA, N...
## $ JobContactPriorities5       <int> 5, 4, NA, NA, 3, 3, 2, 5, 4, NA, N...
## $ JobEmailPriorities1         <int> 5, 1, NA, NA, 7, 2, 1, 2, 3, NA, N...
## $ JobEmailPriorities2         <int> 6, 3, NA, NA, 3, 6, 5, 6, 7, NA, N...
## $ JobEmailPriorities3         <int> 7, 4, NA, NA, 6, 7, 3, 1, 2, NA, N...
## $ JobEmailPriorities4         <int> 2, 5, NA, NA, 2, 3, 4, 3, 4, NA, N...
## $ JobEmailPriorities5         <int> 1, 2, NA, NA, 1, 1, 2, 7, 1, NA, N...
## $ JobEmailPriorities6         <int> 4, 6, NA, NA, 4, 5, 6, 5, 6, NA, N...
## $ JobEmailPriorities7         <int> 3, 7, NA, NA, 5, 4, 7, 4, 5, NA, N...
## $ UpdateCV                    <chr> "My job status or other personal s...
## $ Currency                    <chr> NA, "British pounds sterling (£)",...
## $ Salary                      <dbl> NA, 51000, NA, NA, 260000, 30000, ...
## $ SalaryType                  <chr> "Monthly", "Yearly", NA, NA, "Year...
## $ ConvertedSalary             <dbl> NA, 70841, NA, NA, 21426, 41671, 1...
## $ CurrencySymbol              <chr> "KES", "GBP", NA, NA, "ZAR", "GBP"...
## $ CommunicationTools          <chr> "Slack", "Confluence;Office / prod...
## $ TimeFullyProductive         <chr> "One to three months", "One to thr...
## $ EducationTypes              <chr> "Taught yourself a new language, f...
## $ SelfTaughtTypes             <chr> "The official documentation and/or...
## $ TimeAfterBootcamp           <chr> NA, NA, NA, NA, NA, NA, NA, "Immed...
## $ HackathonReasons            <chr> "To build my professional network"...
## $ AgreeDisagree1              <chr> "Strongly agree", "Agree", NA, "Di...
## $ AgreeDisagree2              <chr> "Strongly agree", "Agree", NA, "Di...
## $ AgreeDisagree3              <chr> "Neither Agree nor Disagree", "Nei...
## $ LanguageWorkedWith          <chr> "JavaScript;Python;HTML;CSS", "Jav...
## $ LanguageDesireNextYear      <chr> "JavaScript;Python;HTML;CSS", "Go;...
## $ DatabaseWorkedWith          <chr> "Redis;SQL Server;MySQL;PostgreSQL...
## $ DatabaseDesireNextYear      <chr> "Redis;SQL Server;MySQL;PostgreSQL...
## $ PlatformWorkedWith          <chr> "AWS;Azure;Linux;Firebase", "Linux...
## $ PlatformDesireNextYear      <chr> "AWS;Azure;Linux;Firebase", "Linux...
## $ FrameworkWorkedWith         <chr> "Django;React", "Django", NA, NA, ...
## $ FrameworkDesireNextYear     <chr> "Django;React", "React", NA, "Angu...
## $ IDE                         <chr> "Komodo;Vim;Visual Studio Code", "...
## $ OperatingSystem             <chr> "Linux-based", "Linux-based", NA, ...
## $ NumberMonitors              <chr> "1", "2", NA, "2", "2", "2", "2", ...
## $ Methodology                 <chr> "Agile;Scrum", NA, NA, "Agile;Kanb...
## $ VersionControl              <chr> "Git", "Git;Subversion", NA, "Git"...
## $ CheckInCode                 <chr> "Multiple times per day", "A few t...
## $ AdBlocker                   <chr> "Yes", "Yes", NA, "Yes", "No", "Ye...
## $ AdBlockerDisable            <chr> "No", "Yes", NA, "Yes", NA, "Yes",...
## $ AdBlockerReasons            <chr> NA, "The website I was visiting as...
## $ AdsAgreeDisagree1           <chr> "Strongly agree", "Somewhat agree"...
## $ AdsAgreeDisagree2           <chr> "Strongly agree", "Neither agree n...
## $ AdsAgreeDisagree3           <chr> "Strongly agree", "Neither agree n...
## $ AdsActions                  <chr> "Saw an online advertisement and t...
## $ AdsPriorities1              <int> 1, 3, NA, NA, 2, 1, 1, NA, 1, NA, ...
## $ AdsPriorities2              <int> 5, 5, NA, NA, 3, 3, 4, NA, 3, NA, ...
## $ AdsPriorities3              <int> 4, 1, NA, NA, 4, 4, 2, NA, 5, NA, ...
## $ AdsPriorities4              <int> 7, 4, NA, NA, 6, 2, 5, NA, 4, NA, ...
## $ AdsPriorities5              <int> 2, 6, NA, NA, 1, 7, 3, NA, 2, NA, ...
## $ AdsPriorities6              <int> 6, 7, NA, NA, 7, 5, 7, NA, 7, NA, ...
## $ AdsPriorities7              <int> 3, 2, NA, NA, 5, 6, 6, NA, 6, NA, ...
## $ AIDangerous                 <chr> "Artificial intelligence surpassin...
## $ AIInteresting               <chr> "Algorithms making important decis...
## $ AIResponsible               <chr> "The developers or the people crea...
## $ AIFuture                    <chr> "I'm excited about the possibiliti...
## $ EthicsChoice                <chr> "No", "Depends on what it is", NA,...
## $ EthicsReport                <chr> "Yes, and publicly", "Depends on w...
## $ EthicsResponsible           <chr> "Upper management at the company/o...
## $ EthicalImplications         <chr> "Yes", "Yes", NA, "Yes", "Yes", "U...
## $ StackOverflowRecommend      <chr> "10 (Very Likely)", "10 (Very Like...
## $ StackOverflowVisit          <chr> "Multiple times per day", "A few t...
## $ StackOverflowHasAccount     <chr> "Yes", "Yes", NA, "Yes", "Yes", "Y...
## $ StackOverflowParticipate    <chr> "I have never participated in Q&A ...
## $ StackOverflowJobs           <chr> "No, I knew that Stack Overflow ha...
## $ StackOverflowDevStory       <chr> "Yes", "No, I have one but it's ou...
## $ StackOverflowJobsRecommend  <chr> NA, "7", NA, "8", NA, "8", "7", NA...
## $ StackOverflowConsiderMember <chr> "Yes", "Yes", NA, "Yes", "Yes", "N...
## $ HypotheticalTools1          <chr> "Extremely interested", "A little ...
## $ HypotheticalTools2          <chr> "Extremely interested", "A little ...
## $ HypotheticalTools3          <chr> "Extremely interested", "A little ...
## $ HypotheticalTools4          <chr> "Extremely interested", "A little ...
## $ HypotheticalTools5          <chr> "Extremely interested", "A little ...
## $ WakeTime                    <chr> "Between 5:00 - 6:00 AM", "Between...
## $ HoursComputer               <chr> "9 - 12 hours", "5 - 8 hours", NA,...
## $ HoursOutside                <chr> "1 - 2 hours", "30 - 59 minutes", ...
## $ SkipMeals                   <chr> "Never", "Never", NA, "3 - 4 times...
## $ ErgonomicDevices            <chr> "Standing desk", "Ergonomic keyboa...
## $ Exercise                    <chr> "3 - 4 times per week", "Daily or ...
## $ Gender                      <chr> "Male", "Male", NA, "Male", "Male"...
## $ SexualOrientation           <chr> "Straight or heterosexual", "Strai...
## $ EducationParents            <chr> "Bachelor’s degree (BA, BS, B.Eng....
## $ RaceEthnicity               <chr> "Black or of African descent", "Wh...
## $ Age                         <chr> "25 - 34 years old", "35 - 44 year...
## $ Dependents                  <chr> "Yes", "Yes", NA, "No", "Yes", "No...
## $ MilitaryUS                  <chr> NA, NA, NA, "No", NA, NA, "No", NA...
## $ SurveyTooLong               <chr> "The survey was an appropriate len...
## $ SurveyEasy                  <chr> "Very easy", "Somewhat easy", NA, ...

4 Participation by Country

survey_country = survey_results %>%
  group_by(Country) %>%
  summarise(Count = n()) %>%
  arrange(desc(Count)) %>%
  ungroup() %>%
  mutate(Country = reorder(Country,Count)) %>%
  head(20) 


treemap(survey_country, 
        index="Country", 
        vSize = "Count",  
        title="Participation by Country", 
        palette = "RdBu",
        fontsize.title = 14 
)

5 Hobbies Analysis

TotalNoofRows = nrow(survey_results)

survey_results %>%
  group_by(Hobby) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  arrange(desc(Count)) %>%
  ungroup() %>%
  mutate(Hobby = reorder(Hobby,Count)) %>%
  
  ggplot(aes(x = Hobby,y = Count)) +
  geom_bar(stat='identity',fill= fillColor2) +
  geom_text(aes(x = Hobby, y = .01, label = paste0("( ",round(Count*100,2)," %)",sep="")),
            hjust=0, vjust=.5, size = 4, colour = 'black',
            fontface = 'bold') +
  scale_y_continuous(labels = percent_format()) +
  labs(x = 'Hobby', 
       y = 'Percentage', 
       title = 'Hobby and Percentage') +
  coord_flip() +
  theme_bw()

More than 80% of the respondents consider Coding as a Hobby.

6 Countries with Hobby as Yes

survey_results %>%
  filter(Hobby == "Yes") %>%
  group_by(Country) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  arrange(desc(Count)) %>%
  ungroup() %>%
  mutate(Country = reorder(Country,Count)) %>%
  head(10) %>%
  
  ggplot(aes(x = Country,y = Count)) +
  geom_bar(stat='identity',fill= fillColor) +
  geom_text(aes(x = Country,y = .01, label = paste0("( ",round(Count*100,2)," %)",sep="")),
            hjust=0, vjust=.5, size = 4, colour = 'black',
            fontface = 'bold') +
  scale_y_continuous(labels = percent_format()) +
  labs(x = 'Country', 
       y = 'Percentage', 
       title = 'Country with Hobby as Coding and Percentage') +
  coord_flip() +
  theme_bw()

United States, India, Germany, United Kingdom and Canada are the countries with people who consider coding as an Hobby.

7 Developer Type Analysis

DevType <- survey_results %>%
  mutate(DevType = str_split(DevType, pattern = ";")) %>%
  unnest(DevType) %>%
  select(DevType)

TotalNoofRows = nrow(DevType)

DevType %>%
  group_by(DevType) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  arrange(desc(Count)) %>%
  ungroup() %>%
  mutate(DevType = reorder(DevType,Count)) %>%
  head(10) %>%
  
  ggplot(aes(x = DevType,y = Count)) +
  geom_bar(stat='identity',fill= fillColor) +
  geom_text(aes(x = DevType, y = .01, label = paste0("( ",round(Count*100,2)," %)",sep="")),
            hjust=0, vjust=.5, size = 4, colour = 'black',
            fontface = 'bold') +
  scale_y_continuous(labels = percent_format()) +
  labs(x = 'DevType', 
       y = 'Percentage', 
       title = 'DevType and Percentage') +
  coord_flip() +
  theme_bw()

The most popular DevTypes are the Back-end , Full Stack and the Front end developers.

8 Top Dev Types with Years of Coding

The bar plot lists the most popular Developer Types along with the Years of Coding

survey_results %>%
  select(DevType,YearsCoding) %>%
  mutate(DevType = str_split(DevType, pattern = ";")) %>%
  unnest(DevType) %>%
  group_by(DevType,YearsCoding) %>%
  summarise(Count = n()) %>%
  arrange(desc(Count)) %>%
  ungroup() %>%
  mutate(YearsCoding = as.character(YearsCoding),
         DevType = as.character(DevType)) %>%
  mutate(DevType_YearsOfCoding = paste(DevType,YearsCoding)) %>%
  mutate(DevType_YearsOfCoding = reorder(DevType_YearsOfCoding,Count)) %>%
  head(10) %>%
  
  ggplot(aes(x = DevType_YearsOfCoding,y = Count)) +
  geom_bar(stat='identity',fill= fillColor2) +
  geom_text(aes(x = DevType_YearsOfCoding, y = 1, label = paste0("( ",Count," )",sep="")),
            hjust=0, vjust=.5, size = 4, colour = 'black',
            fontface = 'bold') +
  labs(x = 'DevType_YearsOfCoding', 
       y='Count', 
       title = 'DevType_YearsOfCoding and Count') +
  coord_flip() +
  theme_bw()

9 Education Analysis

9.1 Formal Education

Answers for Which of the following best describes the highest level of formal education that you have completed?

TotalNoofRows = nrow(survey_results) 

plotFormalEducation <- function(survey_results,TotalNoofRows) {
  survey_results %>%
    filter(!is.na(FormalEducation )) %>%
    select(FormalEducation ) %>%
    group_by(FormalEducation ) %>%
    summarise(Count = n()/TotalNoofRows ) %>%
    arrange(desc(Count)) %>%
    ungroup() %>%
    mutate(FormalEducation  = reorder(FormalEducation ,Count)) %>%
    head(10) %>%
    
    ggplot(aes(x = FormalEducation ,y = Count)) +
    geom_bar(stat='identity',fill= fillColorLightCoral) +
    geom_text(aes(x = FormalEducation , y = .01, label = paste0("( ",round(Count*100,2)," %)",sep="")),
              hjust=0, vjust=.5, size = 4, colour = 'black',
              fontface = 'bold') +
    scale_y_continuous(labels = percent_format()) +
    labs(x = 'FormalEducation ', 
         y = 'Percentage', 
         title = 'FormalEducation  and Percentage') +
    coord_flip() +
    theme_bw()
}

plotFormalEducation(survey_results,TotalNoofRows)

9.2 UnderGrad Major

Answers for You previously indicated that you went to a college or university. Which of the following best describes your main field of study (aka 'major')?

plotUnderGradDegree <- function(survey_results,TotalNoofRows) {
  survey_results %>%
    filter(!is.na(UndergradMajor)) %>%
    select(UndergradMajor) %>%
    group_by(UndergradMajor) %>%
    summarise(Count = n()/TotalNoofRows ) %>%
    arrange(desc(Count)) %>%
    ungroup() %>%
    mutate(UndergradMajor = reorder(UndergradMajor,Count)) %>%
    head(10) %>%
    
    ggplot(aes(x = UndergradMajor,y = Count)) +
    geom_bar(stat='identity',fill= fillColor2) +
    geom_text(aes(x = UndergradMajor,y = .01, label = paste0("( ",round(Count*100,2)," %)",sep="")),
              hjust=0, vjust=.5, size = 4, colour = 'black',
              fontface = 'bold') +
    scale_y_continuous(labels = percent_format()) +
    labs(x = 'UndergradMajor', 
         y = 'Percentage', 
         title = 'UndergradMajor and Percentage') +
    coord_flip() +
    theme_bw()
}

plotUnderGradDegree(survey_results,TotalNoofRows)

10 Developer Desires Next Year

10.1 Platform Desire Next Year

TotalNoofRows = nrow(survey_results)

plotPlatformDesire <- function(survey_results,TotalNoofRows) {
  survey_results %>%
    filter(!is.na(PlatformDesireNextYear)) %>%
    select(PlatformDesireNextYear) %>%
    mutate(PlatformDesireNextYear = str_split(PlatformDesireNextYear, pattern = ";")) %>%
    unnest(PlatformDesireNextYear) %>%
    group_by(PlatformDesireNextYear) %>%
    summarise(Count = n()) %>%
    arrange(desc(Count)) %>%
    ungroup() %>%
    mutate(TotalCount =  sum(Count)) %>%
    mutate(Count =  Count/TotalCount) %>%
    mutate(PlatformDesireNextYear = reorder(PlatformDesireNextYear,Count)) %>%
    head(10) %>%
    
    ggplot(aes(x = PlatformDesireNextYear,y = Count)) +
    geom_bar(stat='identity',fill= fillColor) +
    geom_text(aes(x = PlatformDesireNextYear,y = .01, label = paste0("( ",round(Count*100,2)," %)",sep="")),
              hjust=0, vjust=.5, size = 4, colour = 'black',
              fontface = 'bold') +
  scale_y_continuous(labels = percent_format()) +
    labs(x = 'PlatformDesireNextYear', 
         y='Percentage', 
         title = 'PlatformDesireNextYear and Percentage') +
    coord_flip() +
    theme_bw()
}

plotPlatformDesire(survey_results,TotalNoofRows)

Linux. Android and AWS are the top Platforms which respondents want to learn next year

10.2 Framework Desire Next Year

plotFrameworkDesire <- function(survey_results,TotalNoofRows) {
  survey_results %>%
    filter(!is.na(FrameworkDesireNextYear)) %>%
    select(FrameworkDesireNextYear) %>%
    mutate(FrameworkDesireNextYear = str_split(FrameworkDesireNextYear, pattern = ";")) %>%
    unnest(FrameworkDesireNextYear) %>%
    group_by(FrameworkDesireNextYear) %>%
    summarise(Count = n()/TotalNoofRows) %>%
    arrange(desc(Count)) %>%
    ungroup() %>%
    mutate(TotalCount =  sum(Count)) %>%
    mutate(Count =  Count/TotalCount) %>%
    mutate(FrameworkDesireNextYear = reorder(FrameworkDesireNextYear,Count)) %>%
    head(10) %>%
    
    ggplot(aes(x = FrameworkDesireNextYear,y = Count)) +
    geom_bar(stat='identity',fill= fillColorLightCoral) +
    geom_text(aes(x = FrameworkDesireNextYear,y = .01, label = paste0("( ",round(Count*100,2)," %)",sep="")),
              hjust=0, vjust=.5, size = 4, colour = 'black',
              fontface = 'bold') +
  scale_y_continuous(labels = percent_format()) +
    labs(x = 'FrameworkDesireNextYear', 
         y='Percentage', 
         title = 'FrameworkDesireNextYear and Percentage') +
    coord_flip() +
    theme_bw()
}

plotFrameworkDesire(survey_results,TotalNoofRows)

Node,React and Angular are the top Frameworks which respondents want to learn next year

10.3 Database Desire Next Year

plotDatabaseDesire <- function(survey_results,TotalNoofRows) {
  survey_results %>%
    filter(!is.na(DatabaseDesireNextYear)) %>%
    select(DatabaseDesireNextYear) %>%
    mutate(DatabaseDesireNextYear = str_split(DatabaseDesireNextYear, pattern = ";")) %>%
    unnest(DatabaseDesireNextYear) %>%
    group_by(DatabaseDesireNextYear) %>%
    summarise(Count = n()/TotalNoofRows) %>%
    arrange(desc(Count)) %>%
    ungroup() %>%
    mutate(TotalCount =  sum(Count)) %>%
    mutate(Count =  Count/TotalCount) %>%
    mutate(DatabaseDesireNextYear = reorder(DatabaseDesireNextYear,Count)) %>%
    head(10) %>%
    
    ggplot(aes(x = DatabaseDesireNextYear,y = Count)) +
    geom_bar(stat='identity',fill= fillColor) +
  scale_y_continuous(labels = percent_format()) +
    geom_text(aes(x = DatabaseDesireNextYear,y = .01, label = paste0("( ",round(Count*100,2)," %)",sep="")),
              hjust=0, vjust=.5, size = 4, colour = 'black',
              fontface = 'bold') +
    labs(x = 'DatabaseDesireNextYear', 
         y='Percentage', 
         title = 'DatabaseDesireNextYear and Percentage') +
    coord_flip() +
    theme_bw()
}

plotDatabaseDesire(survey_results,TotalNoofRows)

MySQL, MongoDB and PostgreSQL are the top databases which respondents want to learn next year

10.4 Language Desire Next Year

plotLanguageDesire <- function(survey_results,TotalNoofRows) {
  survey_results %>%
    filter(!is.na(LanguageDesireNextYear)) %>%
    select(LanguageDesireNextYear) %>%
    mutate(LanguageDesireNextYear = str_split(LanguageDesireNextYear, pattern = ";")) %>%
    unnest(LanguageDesireNextYear) %>%
    group_by(LanguageDesireNextYear) %>%
    summarise(Count = n()/TotalNoofRows) %>%
    arrange(desc(Count)) %>%
    ungroup() %>%
    mutate(TotalCount =  sum(Count)) %>%
    mutate(Count =  Count/TotalCount) %>%
    mutate(LanguageDesireNextYear = reorder(LanguageDesireNextYear,Count)) %>%
    head(10) %>%
    
    ggplot(aes(x = LanguageDesireNextYear,y = Count)) +
    geom_bar(stat='identity',fill= fillColor2) +
    geom_text(aes(x = LanguageDesireNextYear,y = .01, label = paste0("( ",round(Count*100,2)," %)",sep="")),
              hjust=0, vjust=.5, size = 4, colour = 'black',
              fontface = 'bold') +
  scale_y_continuous(labels = percent_format()) +
    labs(x = 'LanguageDesireNextYear', 
         y='Percentage', 
         title = 'LanguageDesireNextYear and Percentage') +
    coord_flip() +
    theme_bw()
}

plotLanguageDesire(survey_results,TotalNoofRows)

JavaScript,Python, HTML are the top languages which respondents want to learn next year

11 Language Worked With

survey_results %>%
  filter(!is.na(LanguageWorkedWith)) %>%
  select(LanguageWorkedWith) %>%
  mutate(LanguageWorkedWith = str_split(LanguageWorkedWith, pattern = ";")) %>%
  unnest(LanguageWorkedWith) %>%
  group_by(LanguageWorkedWith) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  arrange(desc(Count)) %>%
  ungroup() %>%
  mutate(TotalCount =  sum(Count)) %>%
  mutate(Count =  Count/TotalCount) %>%
  mutate(LanguageWorkedWith = reorder(LanguageWorkedWith,Count)) %>%
  head(10) %>%
  
  ggplot(aes(x = LanguageWorkedWith,y = Count)) +
  geom_bar(stat='identity',fill= fillColor2) +
  geom_text(aes(x = LanguageWorkedWith,y = .01, label = paste0("( ",round(Count*100,2)," %)",sep="")),
            hjust=0, vjust=.5, size = 4, colour = 'black',
            fontface = 'bold') +
  scale_y_continuous(labels = percent_format()) +
  labs(x = 'LanguageWorkedWith', 
       y='Percentage', 
       title = 'LanguageWorkedWith and Percentage') +
  coord_flip() +
  theme_bw()

11.1 Network Analysis -R

The network graph shows the people associated with R

count_bigrams <- function(dataset) {
  dataset %>%
    unnest_tokens(bigram, LanguageWorkedWith, token = "ngrams", n = 2) %>%
    separate(bigram, c("word1", "word2"), sep = " ") %>%
    count(word1, word2, sort = TRUE)
}


visualize_bigrams <- function(bigrams) {
  set.seed(2016)
  a <- grid::arrow(type = "closed", length = unit(.15, "inches"))
  
  bigrams %>%
    graph_from_data_frame() %>%
    ggraph(layout = "fr") +
    geom_edge_link(aes(edge_alpha = n), show.legend = FALSE, arrow = a) +
    geom_node_point(color = "lightblue", size = 5) +
    geom_node_text(aes(label = name), vjust = 1, hjust = 1) +
    theme_void()
  
}

visualize_bigrams_individual <- function(bigrams) {
  set.seed(2016)
  a <- grid::arrow(type = "closed", length = unit(.15, "inches"))
  
  bigrams %>%
    graph_from_data_frame() %>%
    ggraph(layout = "fr") +
    geom_edge_link(aes(edge_alpha = n), show.legend = FALSE, arrow = a,end_cap = circle(.07, 'inches')) +
    geom_node_point(color = "lightblue", size = 5) +
    geom_node_text(aes(label = name), vjust = 1, hjust = 1) +
    theme_void()
}


survey_results %>%
  count_bigrams() %>%
   filter(word1 == "r" | word2 == "r") %>%
  filter( n > 50) %>%
  visualize_bigrams()

11.2 Network Analysis -Python

The network graph shows the people associated with python

survey_results %>%
  count_bigrams() %>%
   filter(word1 == "python" | word2 == "python") %>%
  filter( n > 50) %>%
  visualize_bigrams()

12 IDE Analysis

survey_results %>%
  filter(!is.na(IDE)) %>%
  select(IDE) %>%
  mutate(IDE = str_split(IDE, pattern = ";")) %>%
  unnest(IDE) %>%
  group_by(IDE) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  arrange(desc(Count)) %>%
  ungroup() %>%
  mutate(TotalCount =  sum(Count)) %>%
  mutate(Count =  Count/TotalCount) %>%
  mutate(IDE = reorder(IDE,Count)) %>%
  head(10) %>%
  
  ggplot(aes(x = IDE,y = Count)) +
  geom_bar(stat='identity',fill= fillColorLightCoral) +
  geom_text(aes(x = IDE,y = .01, label = paste0("( ",round(Count*100,2)," %)",sep="")),
            hjust=0, vjust=.5, size = 4, colour = 'black',
            fontface = 'bold') +
  scale_y_continuous(labels = percent_format()) +
  labs(x = 'IDE', 
       y='Percentage', 
       title = 'IDE and Percentage') +
  coord_flip() +
  theme_bw()

Visual Studio Code, Visual Studio and Notepad++ are the top IDE which respondents want to learn next year

13 Version Control Analysis

survey_results %>%
  filter(!is.na(VersionControl)) %>%
  select(VersionControl) %>%
  mutate(VersionControl = str_split(VersionControl, pattern = ";")) %>%
  unnest(VersionControl) %>%
  group_by(VersionControl) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  arrange(desc(Count)) %>%
  ungroup() %>%
  mutate(TotalCount =  sum(Count)) %>%
  mutate(Count =  Count/TotalCount) %>%
  mutate(VersionControl = reorder(VersionControl,Count)) %>%
  head(10) %>%
  
  ggplot(aes(x = VersionControl,y = Count)) +
  geom_bar(stat='identity',fill= fillColor) +
  geom_text(aes(x = VersionControl,y = .01, label = paste0("( ",round(Count*100,2)," %)",sep="")),
            hjust=0, vjust=.5, size = 4, colour = 'black',
            fontface = 'bold') +
  scale_y_continuous(labels = percent_format()) +
  labs(x = 'VersionControl',
       y='Percentage', 
       title = 'VersionControl and Percentage') +
  coord_flip() +
  theme_bw()

Git, Subversion and Team Foundation Version Control are the top Version Control tools that the respondents use.

14 Communication Tool Analysis

survey_results %>%
  filter(!is.na(CommunicationTools)) %>%
  select(CommunicationTools) %>%
  mutate(CommunicationTools = str_split(CommunicationTools, pattern = ";")) %>%
  unnest(CommunicationTools) %>%
  group_by(CommunicationTools) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  arrange(desc(Count)) %>%
  ungroup() %>%
  mutate(TotalCount =  sum(Count)) %>%
  mutate(Count =  Count/TotalCount * 100) %>%
  mutate(CommunicationTools = reorder(CommunicationTools,Count)) %>%
  head(10) %>%
  
  ggplot(aes(x = CommunicationTools,y = Count)) +
  geom_bar(stat='identity',fill= fillColor2) +
  geom_text(aes(x = CommunicationTools,y = .01, label = paste0("( ",round(Count*100,2)," %)",sep="")),
            hjust=0, vjust=.5, size = 4, colour = 'black',
            fontface = 'bold') +
  scale_y_continuous(labels = percent_format()) +
  labs(x = 'CommunicationTools', 
       y='Percentage', 
       title = 'CommunicationTools and Percentage') +
  coord_flip() +
  theme_bw()

Slack, Jira, Office productivity tools are the top Communication tools that the respondents use.

15 Methodology analysis

survey_results %>%
  filter(!is.na(Methodology)) %>%
  select(Methodology) %>%
  mutate(Methodology = str_split(Methodology, pattern = ";")) %>%
  unnest(Methodology) %>%
  group_by(Methodology) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  arrange(desc(Count)) %>%
  ungroup() %>%
  mutate(TotalCount =  sum(Count)) %>%
  mutate(Count =  Count/TotalCount) %>%
  mutate(Methodology = reorder(Methodology,Count)) %>%
  head(10) %>%
  
  ggplot(aes(x = Methodology,y = Count)) +
  geom_bar(stat='identity',fill= fillColor2) +
  geom_text(aes(x = Methodology,y = .01, label = paste0("( ",round(Count*100,2)," %)",sep="")),
            hjust=0, vjust=.5, size = 4, colour = 'black',
            fontface = 'bold') +
  scale_y_continuous(labels = percent_format()) +
  labs(x = 'Methodology', 
       y='Percentage', 
       title = 'Methodology and Percentage') +
  coord_flip() +
  theme_bw()

Agile, Scrum , Kanban are the top Methodology tools that respondents are using.

16 Lifestyle Analysis

16.1 The Number of Hours in Computer

survey_results %>%
  filter(!is.na(HoursComputer)) %>%
  select(HoursComputer) %>%
  group_by(HoursComputer) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  arrange(desc(Count)) %>%
  ungroup() %>%
  mutate(HoursComputer = reorder(HoursComputer,Count)) %>%
  head(10) %>%
  
  ggplot(aes(x = HoursComputer,y = Count)) +
  geom_bar(stat='identity',fill= fillColor2) +
  geom_text(aes(x = HoursComputer,y = .01, label = paste0("( ",round(Count*100,2)," %)",sep="")),
            hjust=0, vjust=.5, size = 4, colour = 'black',
            fontface = 'bold') +
  scale_y_continuous(labels = percent_format()) +
  labs(x = 'HoursComputer', 
       y='Percentage', 
       title = 'HoursComputer and Percentage') +
  coord_flip() +
  theme_bw()

9-12 hours is the most popular (38%) time interval that developers spend in front of the computer.

16.2 Hours Outside

survey_results %>%
  filter(!is.na(HoursOutside)) %>%
  select(HoursOutside) %>%
  group_by(HoursOutside) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  arrange(desc(Count)) %>%
  ungroup() %>%
  mutate(HoursOutside = reorder(HoursOutside,Count)) %>%
  head(10) %>%
  
  ggplot(aes(x = HoursOutside,y = Count)) +
  geom_bar(stat='identity',fill= fillColor) +
  geom_text(aes(x = HoursOutside,y = .01, label = paste0("( ",round(Count*100,2)," %)",sep="")),
            hjust=0, vjust=.5, size = 4, colour = 'black',
            fontface = 'bold') +
  scale_y_continuous(labels = percent_format()) +
  labs(x = 'HoursOutside', 
       y='Percentage', 
       title = 'HoursOutside and Percentage') +
  coord_flip() +
  theme_bw()

1-2 hours is the most popular (28%) time interval that developers hours outside.

16.3 SkipMeals

survey_results %>%
  filter(!is.na(SkipMeals)) %>%
  select(SkipMeals) %>%
  group_by(SkipMeals) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  arrange(desc(Count)) %>%
  ungroup() %>%
  mutate(SkipMeals = reorder(SkipMeals,Count)) %>%
  head(10) %>%
  
  ggplot(aes(x = SkipMeals,y = Count)) +
  geom_bar(stat='identity',fill= fillColor2) +
  geom_text(aes(x = SkipMeals,y = .01, label = paste0("( ",round(Count*100,2)," %)",sep="")),
            hjust=0, vjust=.5, size = 4, colour = 'black',
            fontface = 'bold') +
  scale_y_continuous(labels = percent_format()) +
  labs(x = 'SkipMeals', 
       y='Percentage', 
       title = 'SkipMeals and Percentage') +
  coord_flip() +
  theme_bw()

Most devs (46%) never skip meals

16.4 Ergonomic Devices

Ergonomic Keyboard or mouse , Standing desk , both 10% of the population are the most popular ergonomic devices used by the developers.

survey_results %>%
  filter(!is.na(ErgonomicDevices)) %>%
  select(ErgonomicDevices) %>%
  group_by(ErgonomicDevices) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  arrange(desc(Count)) %>%
  ungroup() %>%
  mutate(ErgonomicDevices = reorder(ErgonomicDevices,Count)) %>%
  head(10) %>%
  
  ggplot(aes(x = ErgonomicDevices,y = Count)) +
  geom_bar(stat='identity',fill= fillColorLightCoral) +
  geom_text(aes(x = ErgonomicDevices,y = .01, label = paste0("( ",round(Count*100,2)," %)",sep="")),
            hjust=0, vjust=.5, size = 4, colour = 'black',
            fontface = 'bold') +
  scale_y_continuous(labels = percent_format()) +
  labs(x = 'ErgonomicDevices', 
       y='Percentage', 
       title = 'ErgonomicDevices and Percentage') +
  coord_flip() +
  theme_bw()

17 Salary Analysis

17.1 Salary Analysis by DevType

Engineering Manager, DevOps Specialist, C Suite executive are the top positions which have the highest salaries.

survey_results %>%
  filter(!is.na(DevType)) %>%
  select(DevType,ConvertedSalary) %>%
  mutate(DevType = str_split(DevType, pattern = ";")) %>%
  unnest(DevType) %>%
  group_by(DevType) %>%
  summarise(MedianSalary = median(ConvertedSalary,na.rm = TRUE)) %>%
  arrange(desc(MedianSalary)) %>%
  ungroup() %>%
  mutate(DevType = reorder(DevType,MedianSalary)) %>%
  head(10) %>%
  
  ggplot(aes(x = DevType,y = MedianSalary)) +
  geom_bar(stat='identity',fill= fillColor) +
  geom_text(aes(x = DevType, y = 1, label = paste0("( ",round(MedianSalary/1e3)," K)",sep="")),
            hjust=0, vjust=.5, size = 4, colour = 'black',
            fontface = 'bold') +
  labs(x = 'DevType', 
       y = 'Median Salary', 
       title = 'DevType and Median Salary') +
  coord_flip() +
  theme_bw()

17.2 Salary Analysis with Countries 100 and more respondents

United States, Switzerland, Israel, Norway and Denmark are the countries with the highest median salaries with respondents of 100 or more.

Countries <- survey_results %>%
  filter(!is.na(Country)) %>%
  group_by(Country) %>%
  summarise(Count = n()) %>%
  arrange(desc(Count)) %>%
  ungroup() %>%
  mutate(Country = reorder(Country,Count))

Countries100AndMore <- Countries %>%
  filter(Count >= 100)


survey_results %>%
  filter(Country %in% Countries100AndMore$Country) %>%
  group_by(Country) %>%
  summarise(MedianSalary = median(ConvertedSalary,na.rm = TRUE)) %>%
  arrange(desc(MedianSalary)) %>%
  ungroup() %>%
  mutate(Country = reorder(Country,MedianSalary)) %>%
  head(10) %>%
  
  ggplot(aes(x = Country,y = MedianSalary)) +
  geom_bar(stat='identity',fill= fillColor2) +
  geom_text(aes(x = Country, y = 1, label = paste0("( ",round(MedianSalary/1e3)," K)",sep="")),
            hjust=0, vjust=.5, size = 4, colour = 'black',
            fontface = 'bold') +
  labs(x = 'Country', 
       y = 'Median Salary', 
       title = 'Country and Median Salary') +
  coord_flip() +
  theme_bw()

plotSalary <- function(datasetName,fillColorName) {
  
  datasetName %>%
    filter(Country %in% Countries100AndMore$Country) %>%
    group_by(Country) %>%
    summarise(MedianSalary = median(ConvertedSalary,na.rm = TRUE)) %>%
    arrange(desc(MedianSalary)) %>%
    ungroup() %>%
    mutate(Country = reorder(Country,MedianSalary)) %>%
    head(10) %>%
    
    ggplot(aes(x = Country,y = MedianSalary)) +
    geom_bar(stat='identity',fill= fillColorName) +
    geom_text(aes(x = Country, y = 1, label = paste0("( ",round(MedianSalary/1e3)," K)",sep="")),
              hjust=0, vjust=.5, size = 4, colour = 'black',
              fontface = 'bold') +
    labs(x = 'Country', 
         y = 'Median Salary', 
         title = 'Country and Median Salary') +
    coord_flip() +
    theme_bw()
  
}

17.3 Salary Analysis for 25 - 34 years old

The highest median salary for 25-34 years old is 95K. US, Switzerland , Israel , Denmark and Australia are the top Five countries which has the highest salaries in this group.

survey_results_25_34 <- survey_results %>%
  filter(Age == "25 - 34 years old")

plotSalary(survey_results_25_34,fillColorName = fillColor)

17.4 Salary Analysis for 35-44 year olds

The highest median salary for 35-44 years old is 495K followed by more acceptable 120K. Venezuala, US, Switzerland , Israel , Denmark and Norway are the top Six countries which has the highest salaries in this group.

survey_results_35_44 <- survey_results %>%
  filter(Age == "35 - 44 years old")

plotSalary(survey_results_35_44,fillColorName = fillColorLightCoral)

17.5 Salary Analysis for 45-54 year olds

The highest median salary for 45-54 years old is 1000K followed by more acceptable 130K. Venezuala, HongKong, Switzerland , US, Ireland , Israel , Denmark and UAE are the top Eight countries which has the highest salaries in this group.

survey_results_45_54 <- survey_results %>%
  filter(Age == "45 - 54 years old")

plotSalary(survey_results_45_54,fillColorName = fillColor2)

17.6 Salary Analysis Dev Types- Years of Experience in USA

Marketing or Sales Professional, C Suite Executives, Academic Researchers , Engineering Managers and Product Managers get the highest salary in USA.

survey_results %>%
  filter(Country == "United States") %>%
  select(DevType,YearsCoding,ConvertedSalary) %>%
  mutate(DevType = str_split(DevType, pattern = ";")) %>%
  unnest(DevType) %>%
  group_by(DevType,YearsCoding) %>%
  summarise(MedianSalary = median(ConvertedSalary,na.rm = TRUE)) %>%
  arrange(desc(MedianSalary)) %>%
  ungroup() %>%
  mutate(YearsCoding = as.character(YearsCoding),
         DevType = as.character(DevType)) %>%
  mutate(DevType_YearsOfCoding = paste(DevType,YearsCoding)) %>%
  mutate(DevType_YearsOfCoding =str_replace(DevType_YearsOfCoding,"NA","")) %>%
  mutate(DevType_YearsOfCoding = reorder(DevType_YearsOfCoding,MedianSalary)) %>%
  head(10) %>%
  
  ggplot(aes(x = DevType_YearsOfCoding,y = MedianSalary)) +
  geom_bar(stat='identity',fill= fillColor2) +
  geom_text(aes(x = DevType_YearsOfCoding, y = 1, label = paste0("( ",round(MedianSalary,2)/1e3," K)",sep="")),
            hjust=0, vjust=.5, size = 4, colour = 'black',
            fontface = 'bold') +
  labs(x = 'DevType_YearsOfCoding', 
       y='MedianSalary', 
       title = 'DevType_YearsOfCoding and MedianSalary') +
  coord_flip() +
  theme_bw()

18 AI Analysis

18.1 AI Interesting

Answers for What do you think is the most exciting aspect of increasingly advanced AI technology?

survey_results %>%
  filter(!is.na(AIInteresting)) %>%
  select(AIInteresting) %>%
  group_by(AIInteresting) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  arrange(desc(Count)) %>%
  ungroup() %>%
  mutate(AIInteresting = reorder(AIInteresting,Count)) %>%
  head(10) %>%
  
  ggplot(aes(x = AIInteresting,y = Count)) +
  geom_bar(stat='identity',fill= fillColorLightCoral) +
  geom_text(aes(x = AIInteresting,y = .01, label = paste0("( ",round(Count*100,2)," %)",sep="")),
            hjust=0, vjust=.5, size = 4, colour = 'black',
            fontface = 'bold') +
  scale_y_continuous(labels = percent_format()) +
  labs(x = 'AIInteresting', 
       y = 'Percentage', 
       title = 'AIInteresting and Percentage') +
  coord_flip() +
  theme_bw()

18.2 AI Responsible

Answers for Whose responsibility is it, primarily, to consider the ramifications of increasingly advanced AI technology?

survey_results %>%
  filter(!is.na(AIResponsible)) %>%
  select(AIResponsible) %>%
  group_by(AIResponsible) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  arrange(desc(Count)) %>%
  ungroup() %>%
  mutate(AIResponsible = reorder(AIResponsible,Count)) %>%
  head(10) %>%
  
  ggplot(aes(x = AIResponsible,y = Count)) +
  geom_bar(stat='identity',fill= fillColor) +
  geom_text(aes(x = AIResponsible,y = .01, label = paste0("( ",round(Count*100,2)," %)",sep="")),
            hjust=0, vjust=.5, size = 4, colour = 'black',
            fontface = 'bold') +
  scale_y_continuous(labels = percent_format()) +
  labs(x = 'AIResponsible', 
       y = 'Percentage', 
       title = 'AIResponsible and Percentage') +
  coord_flip() +
  theme_bw()

18.3 AI Future

Answers for Overall, what's your take on the future of artificial intelligence?

survey_results %>%
  filter(!is.na(AIFuture)) %>%
  select(AIFuture) %>%
  group_by(AIFuture) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  arrange(desc(Count)) %>%
  ungroup() %>%
  mutate(AIFuture = reorder(AIFuture,Count)) %>%
  head(10) %>%
  
  ggplot(aes(x = AIFuture,y = Count)) +
  geom_bar(stat='identity',fill= fillColor2) +
  geom_text(aes(x = AIFuture,y = .01, label = paste0("( ",round(Count*100,2)," %)",sep="")),
            hjust=0, vjust=.5, size = 4, colour = 'black',
            fontface = 'bold') +
  scale_y_continuous(labels = percent_format()) +
  labs(x = 'AIFuture', 
       y = 'Percentage', 
       title = 'AIFuture and Percentage') +
  coord_flip() +
  theme_bw()

19 Assess Job

The questions have been framed on different topics for developers on how they assess the job. The framework of the questions have 1 with the most important and 10 is the least important.

Developors provide the Most Importance to

19.1 Preference of Industry Rating

breaks = c(1:10)

TotalNoofRows = nrow(survey_results)

survey_results %>%
  filter(!is.na(AssessJob1)) %>%
  group_by(AssessJob1) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  ungroup() %>%
  mutate(AssessJob1 = as.numeric(AssessJob1)) %>%
  
  ggplot(aes(x = AssessJob1,y=Count))+
  geom_bar(stat='identity',colour="white", fill = c("red")) +
  scale_x_continuous(limits = c(0, 11),breaks=breaks ) +
  scale_y_continuous(labels = percent_format()) +
  labs(x = 'Industry I would be working on' ,y = 'Percentage', title = "Industry I would be working on") +
  theme_bw()

The respondents are not concerned about the Industry that they would be working on.

19.2 Financial performance or funding status of the company or organization Rating

survey_results %>%
  filter(!is.na(AssessJob2)) %>%
  group_by(AssessJob2) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  ungroup() %>%
  mutate(AssessJob2 = as.numeric(AssessJob2)) %>%
  
  ggplot(aes(x = AssessJob2,y=Count))+
  geom_bar(stat='identity',colour="white", fill = fillColor2) +
  scale_x_continuous(limits = c(0, 11),breaks=breaks ) +
  scale_y_continuous(labels = percent_format()) +
  labs(x = 'The financial performance or funding status of the company or organization' ,y = 'Count', title = paste("The financial performance or funding status of the company or organization")) +
  theme_bw()

The respondents are not concerned about the financial performance or funding status of the company or organization.

19.3 Specific Department Rating

survey_results %>%
  filter(!is.na(AssessJob3)) %>%
  group_by(AssessJob3) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  ungroup() %>%
  mutate(AssessJob3 = as.numeric(AssessJob3)) %>%
  
  ggplot(aes(x = AssessJob3,y=Count))+
  geom_bar(stat='identity',colour="white", fill = fillColorLightCoral) +
  scale_x_continuous(limits = c(0, 11),breaks=breaks ) +
  scale_y_continuous(labels = percent_format()) +
  labs(x = 'Specific Department Rating' ,y = 'Count', title = 'Specific Department Rating') +
  theme_bw()

19.4 Technologies Rating

survey_results %>%
  filter(!is.na(AssessJob4)) %>%
  group_by(AssessJob4) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  ungroup() %>%
  mutate(AssessJob4 = as.numeric(AssessJob4)) %>%
  
  ggplot(aes(x = AssessJob4,y=Count))+
  geom_bar(stat='identity',colour="white", fill = fillColor) +
  scale_x_continuous(limits = c(0, 11),breaks=breaks ) +   scale_y_continuous(labels = percent_format()) +
  labs(x = 'Technologies Rating' ,y = 'Count', title = 'Technologies Rating') +
  theme_bw()

19.5 The compensation and benefits offered Rating

survey_results %>%
  filter(!is.na(AssessJob5)) %>%
  group_by(AssessJob5) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  ungroup() %>%
  mutate(AssessJob5 = as.numeric(AssessJob5)) %>%
  
  ggplot(aes(x = AssessJob5,y=Count))+
  geom_bar(stat='identity',colour="white", fill = fillColor2) +
  scale_x_continuous(limits = c(0, 11),breaks=breaks ) +   scale_y_continuous(labels = percent_format()) +
  labs(x = 'The compensation and benefits offered Rating' ,y = 'Count', title = 'The compensation and benefits offered Rating') +
  theme_bw()

19.6 The office environment or company culture

survey_results %>%
  filter(!is.na(AssessJob6)) %>%
  group_by(AssessJob6) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  ungroup() %>%
  mutate(AssessJob6 = as.numeric(AssessJob6)) %>%
  
  ggplot(aes(x = AssessJob6,y=Count))+
  geom_bar(stat='identity',colour="white", fill = c("blue")) +
  scale_x_continuous(limits = c(0, 11),breaks=breaks ) +   scale_y_continuous(labels = percent_format()) +
  labs(x = 'The office environment or company culture Rating' ,y = 'Count', title = 'The office environment or company culture Rating') +
  theme_bw()

19.7 The opportunity to work from home/remotely

survey_results %>%
  filter(!is.na(AssessJob7)) %>%
  group_by(AssessJob7) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  ungroup() %>%
  mutate(AssessJob8 = as.numeric(AssessJob7)) %>%
  
  ggplot(aes(x = AssessJob7,y=Count))+
  geom_bar(stat='identity',colour="white", fill = fillColor) +
  scale_x_continuous(limits = c(0, 11),breaks=breaks ) +   scale_y_continuous(labels = percent_format()) +
  labs(x = 'The opportunity to work from home/remotely' ,y = 'Count', title = 'The opportunity to work from home/remotely Rating') +
  theme_bw()

19.8 The Opportunities for professional development

survey_results %>%
  filter(!is.na(AssessJob8)) %>%
  group_by(AssessJob8) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  ungroup() %>%
  mutate(AssessJob8 = as.numeric(AssessJob8)) %>%
  
  ggplot(aes(x = AssessJob8,y=Count))+
  geom_bar(stat='identity',colour="white", fill = c("blue")) +
  scale_x_continuous(limits = c(0, 11),breaks=breaks ) +   scale_y_continuous(labels = percent_format()) +
  labs(x = 'The Opportunities for professional development' ,y = 'Count', title = 'The Opportunities for professional development Rating') +
  theme_bw()

19.9 The diversity of the company or organization

survey_results %>%
  filter(!is.na(AssessJob9)) %>%
  group_by(AssessJob9) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  ungroup() %>%
  mutate(AssessJob8 = as.numeric(AssessJob9)) %>%
  
  ggplot(aes(x = AssessJob9,y=Count))+
  geom_bar(stat='identity',colour="white", fill = fillColor2) +
  scale_x_continuous(limits = c(0, 11),breaks=breaks ) +   scale_y_continuous(labels = percent_format()) +
  labs(x = 'The diversity of the company or organization' ,y = 'Count', title = 'The diversity of the company or organization Rating') +
  theme_bw()

19.10 How widely used or impactful the product or service I’d be working on is Rating

survey_results %>%
  filter(!is.na(AssessJob10)) %>%
  group_by(AssessJob10) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  ungroup() %>%
  mutate(AssessJob8 = as.numeric(AssessJob10)) %>%
  
  ggplot(aes(x = AssessJob10,y=Count))+
  geom_bar(stat='identity',colour="white", fill = c("red")) +
  scale_x_continuous(limits = c(0, 11),breaks=breaks ) +   scale_y_continuous(labels = percent_format()) +
  labs(x = 'How widely used or impactful the product or service' ,y = 'Count', title = 'How widely used or impactful the product or service') +
  theme_bw()

20 Assess Benefits Analysis

The developers have assessed a job benefits package and provided ratings. ( 1- Most Important, 11 - Least Important).

The most important factors while assessing the job benefits package are

20.1 Salary and/or bonuses Rating

breaks = c(1:11)

subjectName = 'Salary and/or bonuses Rating'

survey_results %>%
  filter(!is.na(AssessBenefits1)) %>%
  group_by(AssessBenefits1) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  ungroup() %>%
  mutate(AssessBenefits1 = as.numeric(AssessBenefits1)) %>%
  
  ggplot(aes(x = AssessBenefits1,y=Count))+
  geom_bar(stat='identity',colour="white", fill = c("red")) +
  scale_x_continuous(limits = c(0, 12),breaks=breaks ) +
  scale_y_continuous(labels = percent_format()) +
  labs(x = subjectName ,y = 'Count', title = subjectName) +
  theme_bw()

20.2 Stock options or shares Rating

subjectName = 'Stock options or shares Rating'

survey_results %>%
  filter(!is.na(AssessBenefits2)) %>%
  group_by(AssessBenefits2) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  ungroup() %>%
  mutate(AssessBenefits2 = as.numeric(AssessBenefits2)) %>%
  
  ggplot(aes(x = AssessBenefits2,y=Count))+
  geom_bar(stat='identity',colour="white", fill = c("blue")) +
  scale_x_continuous(limits = c(0, 12),breaks=breaks ) +
  scale_y_continuous(labels = percent_format()) +
  labs(x = subjectName ,y = 'Count', title = subjectName) +
  theme_bw()

20.3 Health insurance

subjectName = 'Health insurance Rating'

survey_results %>%
  filter(!is.na(AssessBenefits3)) %>%
  group_by(AssessBenefits3) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  ungroup() %>%
  mutate(AssessBenefits3 = as.numeric(AssessBenefits3)) %>%
  
  ggplot(aes(x = AssessBenefits3,y=Count))+
  geom_bar(stat='identity',colour="white", fill = fillColor) +
  scale_x_continuous(limits = c(0, 12),breaks=breaks ) +
  scale_y_continuous(labels = percent_format()) +
  labs(x = subjectName ,y = 'Count', title = subjectName) +
  theme_bw()

20.4 Parental leave

subjectName = 'Parental leave Rating'

survey_results %>%
  filter(!is.na(AssessBenefits4)) %>%
  group_by(AssessBenefits4) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  ungroup() %>%
  mutate(AssessBenefits4 = as.numeric(AssessBenefits4)) %>%
  
  ggplot(aes(x = AssessBenefits4,y=Count))+
  geom_bar(stat='identity',colour="white", fill = fillColor2) +
  scale_x_continuous(limits = c(0, 12),breaks=breaks ) +
  scale_y_continuous(labels = percent_format()) +
  labs(x = subjectName ,y = 'Count', title = subjectName) +
  theme_bw()

20.5 Fitness or wellness benefit

subjectName = 'Fitness or wellness benefit Rating'

survey_results %>%
  filter(!is.na(AssessBenefits5)) %>%
  group_by(AssessBenefits5) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  ungroup() %>%
  mutate(AssessBenefits5 = as.numeric(AssessBenefits5)) %>%
  
  ggplot(aes(x = AssessBenefits5,y=Count))+
  geom_bar(stat='identity',colour="white", fill = fillColorLightCoral) +
  scale_x_continuous(limits = c(0, 12),breaks=breaks ) +
  scale_y_continuous(labels = percent_format()) +
  labs(x = subjectName ,y = 'Count', title = subjectName) +
  theme_bw()

20.6 Retirement or pension savings matching

subjectName = 'Retirement or pension savings matching Rating'

survey_results %>%
  filter(!is.na(AssessBenefits6)) %>%
  group_by(AssessBenefits6) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  ungroup() %>%
  mutate(AssessBenefits6 = as.numeric(AssessBenefits6)) %>%
  
  ggplot(aes(x = AssessBenefits6,y=Count))+
  geom_bar(stat='identity',colour="white", fill = c("red")) +
  scale_x_continuous(limits = c(0, 12),breaks=breaks ) +
  scale_y_continuous(labels = percent_format()) +
  labs(x = subjectName ,y = 'Count', title = subjectName) +
  theme_bw()

20.7 Company-provided meals or snacks

subjectName = ' Company-provided meals or snacks Rating'

survey_results %>%
  filter(!is.na(AssessBenefits7)) %>%
  group_by(AssessBenefits7) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  ungroup() %>%
  mutate(AssessBenefits7 = as.numeric(AssessBenefits7)) %>%
  
  ggplot(aes(x = AssessBenefits7,y=Count))+
  geom_bar(stat='identity',colour="white", fill = c("blue")) +
  scale_x_continuous(limits = c(0, 12),breaks=breaks ) +
  scale_y_continuous(labels = percent_format()) +
  labs(x = subjectName ,y = 'Count', title = subjectName) +
  theme_bw()

20.8 Computer/office equipment allowance

subjectName = ' Computer/office equipment allowance Rating'

survey_results %>%
  filter(!is.na(AssessBenefits8)) %>%
  group_by(AssessBenefits8) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  ungroup() %>%
  mutate(AssessBenefits8 = as.numeric(AssessBenefits8)) %>%
  
  ggplot(aes(x = AssessBenefits8,y=Count))+
  geom_bar(stat='identity',colour="white", fill = fillColor) +
  scale_x_continuous(limits = c(0, 12),breaks=breaks ) +
  scale_y_continuous(labels = percent_format()) +
  labs(x = subjectName ,y = 'Count', title = subjectName) +
  theme_bw()

20.9 Childcare benefit

subjectName = ' Childcare benefit Rating'

survey_results %>%
  filter(!is.na(AssessBenefits9)) %>%
  group_by(AssessBenefits9) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  ungroup() %>%
  mutate(AssessBenefits9 = as.numeric(AssessBenefits9)) %>%
  
  ggplot(aes(x = AssessBenefits9,y=Count))+
  geom_bar(stat='identity',colour="white", fill = fillColor2) +
  scale_x_continuous(limits = c(0, 12),breaks=breaks ) +
  scale_y_continuous(labels = percent_format()) +
  labs(x = subjectName ,y = 'Count', title = subjectName) +
  theme_bw()

20.10 Transportation benefit

subjectName = ' Transportation benefit Rating'

survey_results %>%
  filter(!is.na(AssessBenefits10)) %>%
  group_by(AssessBenefits10) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  ungroup() %>%
  mutate(AssessBenefits10 = as.numeric(AssessBenefits10)) %>%
  
  ggplot(aes(x = AssessBenefits10,y=Count))+
  geom_bar(stat='identity',colour="white", fill = fillColorLightCoral) +
  scale_x_continuous(limits = c(0, 12),breaks=breaks ) +
  scale_y_continuous(labels = percent_format()) +
  labs(x = subjectName ,y = 'Count', title = subjectName) +
  theme_bw()

20.11 Conference or education budget

subjectName = ' Conference or education budget'

survey_results %>%
  filter(!is.na(AssessBenefits11)) %>%
  group_by(AssessBenefits11) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  ungroup() %>%
  mutate(AssessBenefits11 = as.numeric(AssessBenefits11)) %>%
  
  ggplot(aes(x = AssessBenefits11,y=Count))+
  geom_bar(stat='identity',colour="white", fill = c("red")) +
  scale_x_continuous(limits = c(0, 12),breaks=breaks ) +
  scale_y_continuous(labels = percent_format()) +
  labs(x = subjectName ,y = 'Count', title = subjectName) +
  theme_bw()

21 Developer Mentalities

We explore the Developer mentalities here.

21.1 Sense of kinship or connection to other developers - Agree / Disagree

subjectName = "Sense of kinship or connection to other developers"

survey_results %>%
  filter(!is.na(AgreeDisagree1)) %>%
  group_by(AgreeDisagree1) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  ungroup() %>%
  
  
  ggplot(aes(x = AgreeDisagree1,y=Count))+
  geom_bar(stat='identity',colour="white", fill = c("red")) +
  scale_y_continuous(labels = percent_format()) +
  labs(x = subjectName ,y = 'Percentage', title = subjectName) +
  theme_bw()

21.2 Competing with my peers - Agree / Disagree

subjectName = "Competing with my peers"

survey_results %>%
  filter(!is.na(AgreeDisagree2)) %>%
  group_by(AgreeDisagree2) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  ungroup() %>%
  
  
  ggplot(aes(x = AgreeDisagree2,y=Count))+
  geom_bar(stat='identity',colour="white", fill = c("blue")) +
  scale_y_continuous(labels = percent_format()) +
  labs(x = subjectName ,y = 'Percentage', title = subjectName) +
  theme_bw()

21.3 Not as good at programming as most of my peers - Agree / Disagree

subjectName = "Not as good at programming as most of my peers"

survey_results %>%
  filter(!is.na(AgreeDisagree3)) %>%
  group_by(AgreeDisagree3) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  ungroup() %>%
  
  ggplot(aes(x = AgreeDisagree3,y=Count))+
  geom_bar(stat='identity',colour="white", fill = fillColor2) +
  scale_y_continuous(labels = percent_format()) +
  labs(x = subjectName ,y = 'Percentage', title = subjectName) +
  theme_bw()

22 Ethics analysis

22.1 Will you write the unethical code if requested?

subjectName = "Will you write the unethical code if requested?"

TotalNoofRows = nrow(survey_results)

survey_results %>%
  filter(!is.na(EthicsChoice)) %>%
  group_by(EthicsChoice) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  ungroup() %>%
  
  
  ggplot(aes(x = EthicsChoice,y=Count))+
  geom_bar(stat='identity',colour="white", fill = fillColor2) +
  scale_y_continuous(labels = percent_format()) +
  labs(x = subjectName ,y = 'Percentage', title = subjectName) +
  theme_bw()

22.2 Do you report or otherwise call out the unethical code in question?

subjectName = "Do you report or otherwise call out the unethical code in question?"

survey_results %>%
  filter(!is.na(EthicsReport)) %>%
  group_by(EthicsReport) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  ungroup() %>%
  
  
  ggplot(aes(x = EthicsReport,y=Count))+
  geom_bar(stat='identity',colour="white", fill = fillColor) +
  scale_y_continuous(labels = percent_format()) +
  labs(x = subjectName ,y = 'Percentage', title = subjectName) +
  theme_bw()

22.3 Most responsible for code that accomplishes something unethical?

subjectName = "Most responsible for code that accomplishes something unethical?"

survey_results %>%
  filter(!is.na(EthicsResponsible)) %>%
  group_by(EthicsResponsible) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  ungroup() %>%
  
  
  ggplot(aes(x = EthicsResponsible,y=Count))+
  geom_bar(stat='identity',colour="white", fill = fillColorLightCoral) +
  scale_y_continuous(labels = percent_format()) +
  labs(x = subjectName ,y = 'Percentage', title = subjectName) +
  theme_bw()

22.4 Obligation to consider the ethical implications of the code that you write

subjectName = "Obligation to consider the ethical implications of the code that you write"

survey_results %>%
  filter(!is.na(EthicalImplications)) %>%
  group_by(EthicalImplications) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  ungroup() %>%
  
  
  ggplot(aes(x = EthicalImplications,y=Count))+
  geom_bar(stat='identity',colour="white", fill = c("blue")) +
  scale_y_continuous(labels = percent_format()) +
  labs(x = subjectName ,y = 'Percentage', title = subjectName) +
  theme_bw()

23 Stack Overflow Inclusivity analysis

23.1 Recommend Stack Overflow overall to a friend or colleague

This is the answer to the question “How likely is it that you would recommend Stack Overflow overall to a friend or colleague?”

subjectName = "StackOverflow Recommend "

TotalNoofRows = nrow(survey_results)

survey_results %>%
  filter(!is.na(StackOverflowRecommend)) %>%
  group_by(StackOverflowRecommend) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  ungroup() %>%
  
  
  ggplot(aes(x = StackOverflowRecommend,y=Count))+
  geom_bar(stat='identity',colour="white", fill = c("red")) +
  scale_y_continuous(labels = percent_format()) +
  labs(x = subjectName ,y = 'Percentage', title = subjectName) +
  theme_bw()

23.2 StackOverflow visit frequency

This is the answer to the question “How frequently would you say you visit Stack Overflow?”

subjectName = "StackOverflow Visit "

survey_results %>%
  filter(!is.na(StackOverflowVisit)) %>%
  group_by(StackOverflowVisit) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  ungroup() %>%
  mutate(StackOverflowVisit = reorder(StackOverflowVisit,Count)) %>%
  
  ggplot(aes(x = StackOverflowVisit,y=Count))+
  geom_bar(stat='identity',colour="white", fill = c("blue")) +
  scale_y_continuous(labels = percent_format()) +
  labs(x = subjectName ,y = 'Percentage', title = subjectName) +
  coord_flip() +
  theme_bw()

23.3 StackOverflow Account

This is the answer to the question “Do you have a Stack Overflow account?”

subjectName = "StackOverflow Account "

survey_results %>%
  filter(!is.na(StackOverflowHasAccount)) %>%
  group_by(StackOverflowHasAccount) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  ungroup() %>%
  
  ggplot(aes(x = StackOverflowHasAccount,y=Count))+
  geom_bar(stat='identity',colour="white", fill = fillColor2) +
  scale_y_continuous(labels = percent_format()) +
  labs(x = subjectName ,y = 'Percentage', title = subjectName) +
  theme_bw()

23.4 StackOverflow Participate

This is the answer to the question “How frequently would you say you participate in Q&A on Stack Overflow? By participate we mean ask, answer, vote for, or comment on questions.”

subjectName = "StackOverflow Participate "

survey_results %>%
  filter(!is.na(StackOverflowParticipate)) %>%
  group_by(StackOverflowParticipate) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  arrange(desc(Count)) %>%
  ungroup() %>%
  mutate(StackOverflowParticipate = reorder(StackOverflowParticipate,Count)) %>%
  
  ggplot(aes(x = StackOverflowParticipate,y=Count))+
  geom_bar(stat='identity',colour="white", fill = fillColor) +
  scale_y_continuous(labels = percent_format()) +
  labs(x = subjectName ,y = 'Percentage', title = subjectName) +
  coord_flip() +
  theme_bw()

23.5 StackOverflow Jobs

This is the answer to the question “Have you ever used or visited Stack Overflow Jobs?”

subjectName = "StackOverflow Jobs "

survey_results %>%
  filter(!is.na(StackOverflowJobs)) %>%
  group_by(StackOverflowJobs) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  arrange(desc(Count)) %>%
  ungroup() %>%
  mutate(StackOverflowJobs = reorder(StackOverflowJobs,Count)) %>%
  
  
  ggplot(aes(x = StackOverflowJobs,y=Count))+
  geom_bar(stat='identity',colour="white", fill = fillColorLightCoral) +
  scale_y_continuous(labels = percent_format()) +
  labs(x = subjectName ,y = 'Percentage', title = subjectName) +
  coord_flip() +
  theme_bw()

23.6 StackOverflow up-to-date Developer Story

This is the answer to the question “Do you have an up-to-date Developer Story on Stack Overflow?”

subjectName = "StackOverflow DevStory "

survey_results %>%
  filter(!is.na(StackOverflowDevStory)) %>%
  group_by(StackOverflowDevStory) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  ungroup() %>%
  
  
  ggplot(aes(x = StackOverflowDevStory,y=Count))+
  geom_bar(stat='identity',colour="white", fill = fillColor) +
  scale_y_continuous(labels = percent_format()) +
  labs(x = subjectName ,y = 'Percentage', title = subjectName) +
  theme_bw()

23.7 StackOverflow Jobs Recommend

This is the answer to the question “How likely is it that you would recommend Stack Overflow Jobs to a friend or colleague? Where 0 is not likely at all and 10 is very likely.”

subjectName = "StackOverflow Jobs Recommend "

survey_results %>%
  filter(!is.na(StackOverflowJobsRecommend)) %>%
  group_by(StackOverflowJobsRecommend) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  ungroup() %>%
  
  
  ggplot(aes(x = StackOverflowJobsRecommend,y=Count))+
  geom_bar(stat='identity',colour="white", fill = fillColor2) +
  scale_y_continuous(labels = percent_format()) +
  labs(x = subjectName ,y = 'Percentage', title = subjectName) +
  theme_bw()

23.8 StackOverflow Consider Member

This is the answer to the question “Do you consider yourself a member of the Stack Overflow community?”

subjectName = "StackOverflow Consider Member "

survey_results %>%
  filter(!is.na(StackOverflowConsiderMember)) %>%
  group_by(StackOverflowConsiderMember) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  ungroup() %>%
  
  
  ggplot(aes(x = StackOverflowConsiderMember,y=Count))+
  geom_bar(stat='identity',colour="white", fill = c("blue")) +
  scale_y_continuous(labels = percent_format()) +
  labs(x = subjectName ,y = 'Percentage', title = subjectName) +
  theme_bw()

24 Hypothetical Tools Interest

Most Developers show the following interests for the Hypothetical Tools

24.1 Interest in Hypothetical Tools

subjectName = 'Hypothetical Tools Interest'

survey_results %>%
  filter(!is.na(HypotheticalTools1)) %>%
  group_by(HypotheticalTools1) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  arrange(desc(Count)) %>%
  ungroup() %>%
  mutate(HypotheticalTools1 = reorder(HypotheticalTools1,Count)) %>%
 
  ggplot(aes(x = HypotheticalTools1,y=Count))+
  geom_bar(stat='identity',colour="white", fill =fillColor) +
  geom_text(aes(x = HypotheticalTools1, y = .01, label = paste0("( ",round(Count*100,2)," %)",sep="")),
            hjust=0, vjust=.5, size = 4, colour = 'black',
            fontface = 'bold') +
  scale_y_continuous(labels = percent_format()) +
  labs(x = subjectName ,y = 'Count', title = subjectName) +
  coord_flip() +
  theme_bw()

24.2 Private Area for people new in Programming

subjectName = 'Private Area for people new in Programming'

survey_results %>%
  filter(!is.na(HypotheticalTools2)) %>%
  group_by(HypotheticalTools2) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  arrange(desc(Count)) %>%
  ungroup() %>%
  mutate(HypotheticalTools2 = reorder(HypotheticalTools2,Count)) %>%
  
  ggplot(aes(x = HypotheticalTools2,y=Count))+
  geom_bar(stat='identity',colour="white", fill =fillColor2) +
  geom_text(aes(x = HypotheticalTools2, y = .01, label = paste0("( ",round(Count*100,2)," %)",sep="")),
            hjust=0, vjust=.5, size = 4, colour = 'black',
            fontface = 'bold') +
  scale_y_continuous(labels = percent_format()) +
  labs(x = subjectName ,y = 'Count', title = subjectName) +
  coord_flip() +
  theme_bw()

24.3 A programming-oriented blog platform

subjectName = 'A programming-oriented blog platform'

survey_results %>%
  filter(!is.na(HypotheticalTools3)) %>%
  group_by(HypotheticalTools3) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  arrange(desc(Count)) %>%
  ungroup() %>%
  mutate(HypotheticalTools3 = reorder(HypotheticalTools3,Count)) %>%
  
  ggplot(aes(x = HypotheticalTools3,y=Count))+
  geom_bar(stat='identity',colour="white", fill =fillColorLightCoral) +
  geom_text(aes(x = HypotheticalTools3, y = .01, label = paste0("( ",round(Count*100,2)," %)",sep="")),
            hjust=0, vjust=.5, size = 4, colour = 'black',
            fontface = 'bold') +
  scale_y_continuous(labels = percent_format()) +
  labs(x = subjectName ,y = 'Count', title = subjectName) +
  coord_flip() +
  theme_bw()

24.4 An employer or job review system

subjectName = 'An employer or job review system'

survey_results %>%
  filter(!is.na(HypotheticalTools4)) %>%
  group_by(HypotheticalTools4) %>%
  summarise(Count = n()/TotalNoofRows) %>%
  arrange(desc(Count)) %>%
  ungroup() %>%
  mutate(HypotheticalTools4 = reorder(HypotheticalTools4,Count)) %>%
  
  ggplot(aes(x = HypotheticalTools4,y=Count))+
  geom_bar(stat='identity',colour="white", fill =fillColor) +
  geom_text(aes(x = HypotheticalTools4, y = .01, label = paste0("( ",round(Count*100,2)," %)",sep="")),
            hjust=0, vjust=.5, size = 4, colour = 'black',
            fontface = 'bold') +
  scale_y_continuous(labels = percent_format()) +
  labs(x = subjectName ,y = 'Count', title = subjectName) +
  coord_flip() +
  theme_bw()

25 Persona Engineering Manager

25.1 Salary

eng_manager <- survey_results %>%
  filter(str_detect(DevType,"Engineering"))

TotalNoofRows = nrow(eng_manager) 

eng_manager %>%
    ggplot(aes(x = ConvertedSalary) )+
    geom_histogram(fill = fillColor2) +
    scale_x_log10() +
    scale_y_log10() + 
    labs(x = 'Annual Salary' ,y = 'Count', title = paste("Distribution of", "Annual Salary")) +
    theme_bw()

summary(eng_manager$ConvertedSalary)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##       0   48300   88573  129926  135000 2000000    2283

25.2 Education Analysis

25.2.1 Formal Education

Answers for Which of the following best describes the highest level of formal education that you have completed?

plotFormalEducation(eng_manager,TotalNoofRows)

25.2.2 UnderGrad Major

Answers for You previously indicated that you went to a college or university. Which of the following best describes your main field of study (aka 'major')?

plotUnderGradDegree(eng_manager,TotalNoofRows)

25.3 PlatformDesire

plotPlatformDesire(eng_manager,TotalNoofRows)

25.4 FrameworkDesire

plotFrameworkDesire(eng_manager,TotalNoofRows)

25.5 DatabaseDesire

plotDatabaseDesire(eng_manager,TotalNoofRows)

25.6 LanguageDesire

plotLanguageDesire(eng_manager,TotalNoofRows)

26 Persona C-Suite Executive

26.1 Salary

c_suite <- survey_results %>%
  filter(str_detect(DevType,"C-suite"))

TotalNoofRows = nrow(c_suite) 

c_suite %>%
    ggplot(aes(x = ConvertedSalary) )+
    geom_histogram(fill = fillColor) +
    scale_x_log10() +
    scale_y_log10() + 
    labs(x = 'Annual Salary' ,y = 'Count', title = paste("Distribution of", "Annual Salary")) +
    theme_bw()

summary(c_suite$ConvertedSalary)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##       0   29376   69244  117667  120787 2000000    1871

26.2 Education Analysis

26.2.1 Formal Education

Answers for Which of the following best describes the highest level of formal education that you have completed?

plotFormalEducation(c_suite,TotalNoofRows)

26.2.2 UnderGrad Major

Answers for You previously indicated that you went to a college or university. Which of the following best describes your main field of study (aka 'major')?

plotUnderGradDegree(c_suite,TotalNoofRows)

26.3 PlatformDesire

plotPlatformDesire(c_suite,TotalNoofRows)

26.4 FrameworkDesire

plotFrameworkDesire(c_suite,TotalNoofRows)

26.5 DatabaseDesire

plotDatabaseDesire(c_suite,TotalNoofRows)

26.6 LanguageDesire

plotLanguageDesire(c_suite,TotalNoofRows)

27 Persona DevOps specialist

27.1 Salary

devops <- survey_results %>%
  filter(str_detect(DevType,"DevOps specialist"))

TotalNoofRows = nrow(devops) 

devops %>%
    ggplot(aes(x = ConvertedSalary) )+
    geom_histogram(fill = fillColor) +
    scale_x_log10() +
    scale_y_log10() + 
    labs(x = 'Annual Salary' ,y = 'Count', title = paste("Distribution of", "Annual Salary")) +
    theme_bw()

summary(devops$ConvertedSalary)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##       0   41124   72469  115029  110000 2000000    3462

27.2 Education Analysis

27.2.1 Formal Education

Answers for Which of the following best describes the highest level of formal education that you have completed?

plotFormalEducation(devops,TotalNoofRows)

27.2.2 UnderGrad Major

Answers for You previously indicated that you went to a college or university. Which of the following best describes your main field of study (aka 'major')?

plotUnderGradDegree(devops,TotalNoofRows)

27.3 PlatformDesire

plotPlatformDesire(devops,TotalNoofRows)

27.4 FrameworkDesire

plotFrameworkDesire(devops,TotalNoofRows)

27.5 DatabaseDesire

plotDatabaseDesire(devops,TotalNoofRows)

27.6 LanguageDesire

plotLanguageDesire(devops,TotalNoofRows)

28 Persona Back-end developer

28.1 Salary

backend <- survey_results %>%
  filter(str_detect(DevType,"Back-end developer"))

TotalNoofRows = nrow(backend) 

backend %>%
    ggplot(aes(x = ConvertedSalary) )+
    geom_histogram(fill = fillColor) +
    scale_x_log10() +
    scale_y_log10() + 
    labs(x = 'Annual Salary' ,y = 'Count', title = paste("Distribution of", "Annual Salary")) +
    theme_bw()

summary(backend$ConvertedSalary)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##       0   24478   55562   96610   95000 2000000   24313

28.2 Education Analysis

28.2.1 Formal Education

Answers for Which of the following best describes the highest level of formal education that you have completed?

plotFormalEducation(backend,TotalNoofRows)

28.2.2 UnderGrad Major

Answers for You previously indicated that you went to a college or university. Which of the following best describes your main field of study (aka 'major')?

plotUnderGradDegree(backend,TotalNoofRows)

28.3 PlatformDesire

plotPlatformDesire(backend,TotalNoofRows)

28.4 FrameworkDesire

plotFrameworkDesire(backend,TotalNoofRows)

28.5 DatabaseDesire

plotDatabaseDesire(backend,TotalNoofRows)

28.6 LanguageDesire

plotLanguageDesire(backend,TotalNoofRows)

29 Persona Front-end developer

29.1 Salary

frontend <- survey_results %>%
  filter(str_detect(DevType,"Front-end developer"))

TotalNoofRows = nrow(frontend) 

frontend %>%
    ggplot(aes(x = ConvertedSalary) )+
    geom_histogram(fill = fillColor) +
    scale_x_log10() +
    scale_y_log10() + 
    labs(x = 'Annual Salary' ,y = 'Count', title = paste("Distribution of", "Annual Salary")) +
    theme_bw()

summary(frontend$ConvertedSalary)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##       0   22032   51408   95028   88116 2000000   16333

29.2 Education Analysis

29.2.1 Formal Education

Answers for Which of the following best describes the highest level of formal education that you have completed?

plotFormalEducation(frontend,TotalNoofRows)

29.2.2 UnderGrad Major

Answers for You previously indicated that you went to a college or university. Which of the following best describes your main field of study (aka 'major')?

plotUnderGradDegree(frontend,TotalNoofRows)

29.3 PlatformDesire

plotPlatformDesire(frontend,TotalNoofRows)

29.4 FrameworkDesire

plotFrameworkDesire(frontend,TotalNoofRows)

29.5 DatabaseDesire

plotDatabaseDesire(frontend,TotalNoofRows)

29.6 LanguageDesire

plotLanguageDesire(frontend,TotalNoofRows)

30 Persona Data scientist

30.1 Salary

data_scientist <- survey_results %>%
  filter(str_detect(DevType,"Data scientist"))

TotalNoofRows = nrow(data_scientist) 

data_scientist %>%
    ggplot(aes(x = ConvertedSalary) )+
    geom_histogram(fill = fillColor) +
    scale_x_log10() +
    scale_y_log10() + 
    labs(x = 'Annual Salary' ,y = 'Count', title = paste("Distribution of", "Annual Salary")) +
    theme_bw()

summary(data_scientist$ConvertedSalary)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##       0   28044   60000  101430  100652 2000000    3325

30.2 Education Analysis

30.2.1 Formal Education

Answers for Which of the following best describes the highest level of formal education that you have completed?

plotFormalEducation(data_scientist,TotalNoofRows)

30.2.2 UnderGrad Major

Answers for You previously indicated that you went to a college or university. Which of the following best describes your main field of study (aka 'major')?

plotUnderGradDegree(data_scientist,TotalNoofRows)

30.3 PlatformDesire

plotPlatformDesire(data_scientist,TotalNoofRows)

30.4 FrameworkDesire

plotFrameworkDesire(data_scientist,TotalNoofRows)

30.5 DatabaseDesire

plotDatabaseDesire(data_scientist,TotalNoofRows)

30.6 LanguageDesire

plotLanguageDesire(data_scientist,TotalNoofRows)

31 Persona Business Analyst

31.1 Salary

business_analyst <- survey_results %>%
  filter(str_detect(DevType,"business analyst"))

TotalNoofRows = nrow(business_analyst) 

business_analyst %>%
    ggplot(aes(x = ConvertedSalary) )+
    geom_histogram(fill = fillColor) +
    scale_x_log10() +
    scale_y_log10() + 
    labs(x = 'Annual Salary' ,y = 'Count', title = paste("Distribution of", "Annual Salary")) +
    theme_bw()

summary(business_analyst$ConvertedSalary)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##       0   28235   58891  106542   95000 2000000    3471

31.2 Education Analysis

31.2.1 Formal Education

Answers for Which of the following best describes the highest level of formal education that you have completed?

plotFormalEducation(business_analyst,TotalNoofRows)

31.2.2 UnderGrad Major

Answers for You previously indicated that you went to a college or university. Which of the following best describes your main field of study (aka 'major')?

plotUnderGradDegree(business_analyst,TotalNoofRows)

31.3 PlatformDesire

plotPlatformDesire(business_analyst,TotalNoofRows)

31.4 FrameworkDesire

plotFrameworkDesire(business_analyst,TotalNoofRows)

31.5 DatabaseDesire

plotDatabaseDesire(business_analyst,TotalNoofRows)

31.6 LanguageDesire

plotLanguageDesire(business_analyst,TotalNoofRows)